@echo off
SET PORT=%1  REM 获取端口号作为命令行参数

IF "%PORT%"=="" (
    echo "请指定一个端口号."
    exit /b 1
)

REM 检查端口是否被占用
call :is_port_occupied %PORT%
IF %ERRORLEVEL%==0 (
    echo "端口 %PORT% 被占用, 正在尝试终止占用该端口的进程..."
    call :kill_process_using_port %PORT%
) ELSE (
    echo "端口 %PORT% 可用，继续启动服务器。"
)

exit /b

REM 检查端口是否被占用的函数
:is_port_occupied
    SET PORT=%1
    REM 使用 netstat 查找占用指定端口的进程
    FOR /F "tokens=5" %%a IN ('netstat -ano ^| findstr :%PORT%') DO SET PID=%%a
    REM 如果有进程占用端口，则返回 0，否则返回 1
    IF DEFINED PID (
        exit /b 0
    ) ELSE (
        exit /b 1
    )

REM 终止占用端口的进程
:kill_process_using_port
    SET PORT=%1
    FOR /F "tokens=5" %%a IN ('netstat -ano ^| findstr :%PORT%') DO SET PID=%%a
    REM 使用 taskkill 结束占用端口的进程
    IF DEFINED PID (
        taskkill /PID %PID% /F
        echo "端口 %PORT% 被占用，进程 %PID% 已被终止."
    ) ELSE (
        echo "没有找到占用端口 %PORT% 的进程."
    )
